package demo4.Util;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

//@Component
@PropertySource("classpath:config.properties")
public class DBUtil implements IDBUtil{
    private String url;

    private String username;

    private String password;

//spring工作的时候要用到DBUtil的时候，虚拟机要先读这个字节码文件，一旦DBUtil这个类被加载到虚拟机内部，虚拟机马上就会调用静态块的   所以spring进行工作之前 static已经工作完了
    //在spring最早最早入手的时候，进行工作的时候，static都已经进行完工作了，那spring怎么从配置文件里面拿到的值再让你用呢？ 这是没办法的
    //哪个配置文件也不能在静态块上使用，除非自己在这里面读，除非自己写io自己读才可以。 因此下面的代码就没有办法使用了
//    static{
//        try {
//            Class.forName("com.mysql.cj.jdbc.Driver");
//        } catch (ClassNotFoundException e) {
//            e.printStackTrace();
//        }
//    }
    @Override
    public Connection getConnection() throws SQLException {
        return DriverManager.getConnection( url,username,password
                //"jdbc:mysql://localhost:3306/tedu?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true",
                    //"root",
                    //"root"
        );
    }

    @Value("${spring.datasource.url}")
    public void setUrl(String url) {
        this.url = url;
    }
    @Value("${spring.datasource.username}")
    public void setUsername(String username) {
        this.username = username;
    }
    @Value("${spring.datasource.password}")
    public void setPassword(String password) {
        this.password = password;
    }

    @Value("${spring.datasource.classname}")
    public void setClassname(String classname){
        try {
            Class.forName(classname);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}
